import { id_split } from '../../../../components/my_schedule/DataDefine/sourceData';
import { math_random_digits } from '../../../Func/uniFunc/Func';
import {
  ObjectOnlyPushSet,
  removeObjectOnlyPushSet,
} from '../../../Func/uniFunc/Func/ObjectOnlyPushSet_operate';

const history_manaTag = 'history_mana';

/**
 * 所有 key 值 集
 */
const history_mana_prop_operate_keys = 'operate_keys';

class history_mana {
  get [Symbol.toStringTag]() {
    return history_manaTag;
  }

  /**
   * 操作 名
   * @type {string[]}
   */
  operate_keys = [];

  constructor() {}

  /**
   * 添加 一个 历史 记录
   * @param {string} key
   * @param {any} obj
   * @param {string} group_name 组 名
   */
  add(key, obj, group_name) {
    while (this[key] != undefined) {
      key = get_dynamic_key(key);
    }

    obj[history_mana_prop_operate_keys] = key;

    // 为 当前 数据 进行 分组
    if (group_name != undefined) {
      (this[group_name] = this[group_name] || []).push(key);
    }

    ObjectOnlyPushSet(this, key, obj, history_mana_prop_operate_keys);
  }

  /**
   * 删除 一个 历史记录
   * @param {string} key
   */
  remove(key) {
    removeObjectOnlyPushSet(key);
  }

  /**
   * 删除 最后一个 历史记录
   */
  remove_last() {
    this.remove(this.#get_keys_last_key());
  }

  /**
   * 获取 最后一次 操作 信息
   */
  get_last_keyInfos() {
    return this[this.#get_keys_last_key()];
  }

  /**
   * 获取 最后一个 添加 的 历史记录 的 key 值
   * @returns {string}
   */
  #get_keys_last_key() {
    return this[history_mana_prop_operate_keys][
      this[history_mana_prop_operate_keys].length - 1
    ];
  }
}

/**
 * 重新 定义 一个 唯一 key 值
 * @param {string} key
 * @returns
 */
function get_dynamic_key(key) {
  return key + id_split + math_random_digits(5);
}

export { history_mana };
